#include "drv_misc.h"
#include "windows.h"
#include <stdio.h>

int DrvMisc_GetSec(uint64_t *time) {
  SYSTEMTIME system_time;
  FILETIME file_time;
  ULARGE_INTEGER uli;
  GetSystemTime(&system_time);
  // 将 SYSTEMTIME 转换为 FILETIME
  SystemTimeToFileTime(&system_time, &file_time);

  // 将 FILETIME 转换为 ULARGE_INTEGER，以便于计算
  uli.LowPart = file_time.dwLowDateTime;
  uli.HighPart = file_time.dwHighDateTime;

  // FILETIME 是自1601年1月1日以来的100纳秒间隔
  // 从1601年到1970年的总时长（100纳秒为单位）
  const uint64_t EPOCH_DIFF =
      116444736000000000ULL; // 1970年1月1日 - 1601年1月1日
  const uint64_t HUNDRED_NANOSECONDS_IN_SECOND = 10000000ULL; // 100纳秒

  // 计算当前时间的Unix时间戳（秒数）
  uint64_t seconds_since_epoch =
      (uli.QuadPart - EPOCH_DIFF) / HUNDRED_NANOSECONDS_IN_SECOND;
  *time = seconds_since_epoch;
  return 0;
}

int DrvMisc_GetTime(DevTime_t *cur_time) {
  SYSTEMTIME st;
  GetSystemTime(&st);
  cur_time->year = st.wYear;
  cur_time->month = st.wMonth;
  cur_time->time_zone = 8;
  cur_time->day = st.wDay;
  cur_time->hour = st.wHour;
  cur_time->minute = st.wMinute;
  cur_time->second = st.wSecond;
  cur_time->millisecond = st.wMilliseconds;
  return 0;
}

uint32_t DrvMisc_GetSysTick(void) { return GetTickCount(); }

bool DrvMisc_IsRestore() { return false; }

bool DrvMisc_IsDebug() { return false; }

void DrvMisc_ClearRestoreFlag() {}

bool DrvMisc_IsBattDoorOpen() { return false; }

int DrvMisc_GetBattInfoByQV(uint8_t *cap, uint16_t *volt) {
  *cap = 100;
  *volt = 4200;
  return 0;
}

int DrvMisc_SetStateLightFlicker(uint8_t color_mask, uint32_t light_ms,
                                 uint32_t itv_ms, uint32_t flicker_tick,
                                 bool sync) {
  return 0;
}
void DrvMisc_SetDebugLight() {}
void DrvMisc_SetRestoreLight() {}
void DrvMisc_SetSelfTestLight() {};
void DrvMisc_SetFactoryModeLight() {};

int DrvMisc_SetRadarPower(bool on) { return 0; }
